package Day_0204.MYSQL;

/**
 * @author zxc
 * @date 2023/02/04 17:36
 **/
public class Pessimistic_Optimistic_Lock {
    public static void main(String[] args) {
        /**
         * 谈一谈对于乐观锁和悲观锁的理解
         * ===》
         * 1.悲观锁
         * （1）说的是数据库被外界（包括本系统当前的其他事物以及来自外部系统的事务处理）修改保持着保守态度，
         * （2）因此在整个数据修改过程中，将所需要进行修改的数据处于锁状态。
         * （3）悲观的实现往往是依靠数据库提供的锁机制，也只有数据库层面提供的锁机制才能真正保证数据访问的排他性;
         * （4）在悲观锁的情况下，为了保证事务的隔离性，就需要一致性锁定读（MVCC）。
         *  ===》 即，在某个事务处理过程中，该事务所读取的数据都是该事务开始时数据库中数据所对应的快照;
         *
         * （5）读取数据时，给所要读取的数据加锁，其它事务无法修改这些数据。
         *  修改删除数据时也要加锁，其它事务无法读取这些数据。
         *
         * 2.乐观锁
         * （1）相对悲观锁而言，乐观锁机制采取了更加宽松的加锁机制。
         * （2）悲观锁大多数情况下依靠数据库的锁机制实现，以保证操作最大程度的独占性。
         *  但随之而来的就是数据库性能的大量开销，特别是对长事务而言，这样的开销往往无法承受。
         * （3）乐观锁，大多是基于数据版本（Version）记录机制实现。
         * （4）何谓数据版本？
         *  即，为数据增加一个版本标识，在基于数据库表的版本解决方案中，一般是通过为数据库表增加一个“version”字段来实现。
         *  a.读取出数据时，将此版本号一同读出，之后更新时，对此版本号加一。
         *  b.此时，将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对，
         *  c.如果提交的数据版本号大于数据库表当前版本号，则予以更新，否则认为是过期数据。
         *
         */
    }
}
